const db = require('../db/index')
const bcrypt = require('bcryptjs')
const sequelize = require('sequelize')
const { Op } = require("sequelize")
//引入用户模型
const initModels = require('../models/init-models')
const User = initModels(db).info_users
const Menu = initModels(db).info_menus
const Role = initModels(db).info_roles

//获取用户信息的函数
 exports.getUserInfo = async (req,res) => {
     try{
         await db.sync()
         //查询用户基本信息，为了防止用户的密码泄露，需要排除password字段
         let result = await User.findAll({
             attributes: ['id', 'username', 'nickname', 'email', 'avatar','roles'],
             where: { id: req.auth.id },
         })
         if(result.length !== 1) return res.cc('获取用户信息失败！')
         //根据用户的角色查询到对应的菜单code
         let codeResult = []
         if(result[0].roles && result[0].roles !== ''){
             const roleArr = result[0].roles.split(',')
             let idResult = await Role.findAll({
                 attributes: [ 'menuId' ],
                 where: {
                     id: {
                         [Op.in]: roleArr
                     }
                 }
             })
             let menuArr = []
             idResult.forEach(item =>{
                 if(item.menuId){
                     menuArr = [...menuArr,item.menuId.split(',')]
                 }
             })
             codeResult = await Menu.findAll({
                 attributes: ['code' ],
                 where: {
                     id: {
                         [Op.in]: menuArr
                     }
                 }
             })
         }
         const newArr = codeResult.map(item => item.code)
         result[0].routes = newArr
         res.send({
             status: 0,
             message: '获取用户信息成功',
             data: result
         })
     } catch (error) {
         res.cc(error)
     }
     // const sqlStr = `select id, username,nickname, email, avatar from info_users where id = ?`
     // db.query(sqlStr, req.auth.id, (err,results) => {
     //     if(err) return res.cc(err)
     //     if(results.length !== 1) return res.cc('获取用户信息失败！')
     //     res.send({
     //         status: 0,
     //         message: '获取用户信息成功',
     //         data: results
     //     })
     // })
 }
 //更新用户信息
exports.updateUserInfo = async (req,res) => {
    try{
        const { username, nickname, id } =req.body
        await db.sync()
        //查询用户基本信息，为了防止用户的密码泄露，需要排除password字段
        let result = await User.update({username,nickname},{where: { id },})
        if(result !== 1) return res.cc('更新用户信息失败！')
    } catch (error) {
        res.cc(error)
    }
    // const sqlStr = `update info_users set ? where id = ?`
    // db.query(sqlStr, [req.body, req.body.id ], (err,results) => {
    //     if(err) return res.cc(err)
    //     if(results.affectedRows !== 1) return res.cc('更新用户信息失败！')
    //     res.cc('更新用户信息成功！',0)
    // })
}
//重置密码
exports.updatePassword = async (req,res) =>{
    try{
        await db.sync()
        //查询用户基本信息，为了防止用户的密码泄露，需要排除password字段
        let result = await User.findAll({
            where: { id: req.auth.id },
        })
        if(result.length !== 1) return res.cc('未获取到相关用户信息！')
        const compareResult = bcrypt.compareSync(req.body.oldPwd, result[0].password)
        if(!compareResult) return res.cc('旧密码错误！')
        //对新密码加密
        const newPwd = bcrypt.hashSync(req.body.newPwd, 10)
        let updateResult = await User.update({ password: newPwd },{where: { id: req.auth.id },})
        if(updateResult !==1) return res.cc('更新密码失败！')
        res.cc('更新密码成功！',0)
    } catch (error) {
        res.cc(error)
    }
    // const sqlStr = `select * from info_users where id = ?`
    // db.query(sqlStr, req.auth.id, (err,results) => {
    //     if(err) return res.cc(err)
    //     if(results.length !== 1) return res.cc(err)
    //     const compareResult = bcrypt.compareSync(req.body.oldPwd, results[0].password)
    //     if(!compareResult) return res.cc('旧密码错误！')
    //     const sqlUpdate = `update info_users set password=? where id=?`
    //     //对新密码加密
    //     const newPwd = bcrypt.hashSync(req.body.newPwd, 10)
    //     db.query(sqlUpdate, [newPwd, req.auth.id], (err,results) =>{
    //         if(err) return res.cc(err)
    //         if(results.affectedRows !==1) return res.cc('更新密码失败！')
    //         res.cc('更新密码成功！',0)
    //     })
    // })
}
//更换头像
exports.updateAvatar = async (req,res) => {
    try{
        const { avatar } =req.body
        await db.sync()
        //查询用户基本信息，为了防止用户的密码泄露，需要排除password字段
        let result = await User.update({avatar},{where: { id: req.auth.id },})
        if(result === null) return res.cc('更换头像失败！')
        res.cc('更换头像成功！',0)
    } catch (error) {
        res.cc(error)
    }
    // const sqlStr = `update info_users set avatar=? where id=?`
    // db.query(sqlStr, [req.body.avatar, req.auth.id ],(err,results) => {
    //     if(err) return res.cc(err)
    //     if(results.affectedRows !== 1) return res.cc('更换头像失败！')
    //     res.cc('更换头像成功！',0)
    // })
}
